package i2.application.checklist.struts.actions;

import i2.application.checklist.entities.Application;
import i2.application.checklist.entities.Categorie;
import i2.application.checklist.entities.CheckList;
import i2.application.checklist.entities.Livrable;
import i2.application.checklist.entities.Livraison;
import i2.application.checklist.services.CheckListService;
import i2.application.checklist.services.LivraisonService;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ActionSupport;

public class LivraisonAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private static final Logger logger = LoggerFactory.getLogger(LivraisonAction.class);
	
	private LivraisonService livraisonService;

	private CheckListService checkListService;

	private List<Livraison> livraisonList;

	private int id;

	private Livraison livraison;

	private List<Livrable> enumLivrable;

	private List<Application> enumApplication;

	private List<Categorie> enumCategorie;

	private String[] categorieIdList;

	private int idLivrable;

	private Livrable livrable;
	
	private Categorie categorie;
	
	private boolean creation = false;
	
	private List<Categorie> categorieAjouteeList = new ArrayList<Categorie>();
	
	public String list() {
		livraisonList = livraisonService.getListLivraison();
		return SUCCESS;
	}

	public String editer() {
		livraison = livraisonService.getLivraison(livraison);
		
		if (livraison == null) {
			logger.error("{} n'est un identifiant de livraison connu",id);
			return "list";
		}

		return INPUT;
	}
	
	public String modifier() {
		logger.debug("livraison modifiée : {}",livraison);
		livraison = livraisonService.updateLivraison(livraison);
		return "view";
	}
	
	public String consulter() {
		
		livraison = livraisonService.getLivraison(new Livraison(id));
		
		return "view";
	}

	public String creer() {
		creation = true;
		return INPUT;
	}

	public String enregistrer() {
		// en cas d'erreur de validation
		creation = true;
		// FIX ME on doit faire un update car on met une catégorie déjà en base ...
		// il faudrait que la catégorie ne vienne pas de la table de code mais de la base de données ....
		logger.debug("livraison enregistree : {}",livraison);
		
		livraison  = livraisonService.updateLivraison(livraison);

		CheckList checkList = new CheckList();
		checkList.setLivraison(livraison);
		
		checkList = checkListService.updateCheckList(checkList);
		livraison.setCheckList(checkList);
		
		return "view";
	}
	
	public String supprimer() {
		livraisonService.supprimerLivraison(livraison);
		return "list";
	}
	
	public String ajouterLivrable() {
		try {
			// recharger de la catégorie avec toutes les informations
			livrable.setCategorie(enumCategorie.get(enumCategorie.indexOf(livrable.getCategorie())));
		} catch (IndexOutOfBoundsException e) {
			logger.error("l'identifiant de la catégorie n'est pas connu");
			return ERROR;
		}
		livraison.addLivrable(livrable);
		creation = true;
		return INPUT;
	}
	
	public String supprimerLivrable() {
		livraison.deleteLivrable(idLivrable); //TODO remplacer par indexLivrable..
		creation = true;
		return INPUT;
	}

	public List<Application> getEnumApplication() {
		return enumApplication;
	}

	public void setEnumApplication(List<Application> enumApplication) {
		this.enumApplication = enumApplication;
	}

	public List<Livraison> getLivraisonList() {
		return livraisonList;
	}

	public int getIdLivrable() {
		return idLivrable;
	}

	public void setIdLivrable(int idLivrable) {
		this.idLivrable = idLivrable;
	}

	public List<Livrable> getEnumLivrable() {
		return enumLivrable;
	}

	public void setEnumLivrable(List<Livrable> enumLivrable) {
		this.enumLivrable = enumLivrable;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
	public void setLivraisonService(LivraisonService livraisonService) {
		this.livraisonService = livraisonService;
	}

	public List<Categorie> getEnumCategorie() {
		return enumCategorie;
	}

	public void setEnumCategorie(List<Categorie> enumCategorie) {
		this.enumCategorie = enumCategorie;
	}

	public String[] getCategorieIdList() {
		return categorieIdList;
	}

	public void setCategorieIdList(String[] categorieIdList) {
		logger.error("setCategorieList : {}", categorieIdList);
		this.categorieIdList = categorieIdList;
	}

	public Livrable getLivrable() {
		return livrable;
	}

	public void setLivrable(Livrable livrable) {
		this.livrable = livrable;
	}

	public Livraison getLivraison() {
		return livraison;
	}

	public void setLivraison(Livraison livraison) {
		this.livraison = livraison;
	}
	
	public Categorie getCategorie() {
		return categorie;
	}

	public void setCategorie(Categorie categorie) {
		this.categorie = categorie;
	}

	public List<Categorie> getCategorieAjouteeList() {
		return categorieAjouteeList;
	}

	public void setCheckListService(CheckListService checkListService) {
		this.checkListService = checkListService;
	}

	public boolean isCreation() {
		return creation;
	}
	
}
